#include "app.h"
#include "usart.h"
#include "i2c.h"

uint8_t sleep_uart_flag = 1;
uint8_t sleep_adc_flag = 1;

extern void SystemClock_Config(void);

void sleep_poll(void){
    if(sleep_adc_flag && sleep_uart_flag){
        GPIO_InitTypeDef GPIO_InitStruct = {0};
        GPIO_InitStruct.Pin = ADC_RST_Pin;
        GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        HAL_GPIO_Init(ADC_RST_GPIO_Port, &GPIO_InitStruct);
        HAL_GPIO_WritePin(ADC_PWR_EN_GPIO_Port, ADC_PWR_EN_Pin, GPIO_PIN_RESET);
//        GPIO_InitStruct.Pin = ADC_PWR_EN_Pin;
//        GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
//        GPIO_InitStruct.Pull = GPIO_NOPULL;
//        HAL_GPIO_Init(ADC_PWR_EN_GPIO_Port, &GPIO_InitStruct);
        
        HAL_I2C_MspDeInit(&hi2c1);
        UART_WakeUpTypeDef wup_config;
        wup_config.WakeUpEvent = UART_WAKEUP_ON_STARTBIT;
        HAL_UARTEx_StopModeWakeUpSourceConfig(&hlpuart1, wup_config);
        HAL_UART_DMAPause(&hlpuart1);
        HAL_UARTEx_EnableStopMode(&hlpuart1);
        HAL_PWREx_EnableFastWakeUp();
        HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
        SystemClock_Config();
        
        GPIO_InitStruct.Pin = ADC_RST_Pin;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(ADC_RST_GPIO_Port, &GPIO_InitStruct);
//        GPIO_InitStruct.Pin = ADC_PWR_EN_Pin;
//        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
//        GPIO_InitStruct.Pull = GPIO_PULLDOWN;
//        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
//        HAL_GPIO_Init(ADC_PWR_EN_GPIO_Port, &GPIO_InitStruct);
        
//        HAL_GPIO_WritePin(ADC_PWR_EN_GPIO_Port, ADC_PWR_EN_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(ADC_RST_GPIO_Port, ADC_RST_Pin, GPIO_PIN_RESET);
        
        HAL_UARTEx_DisableStopMode(&hlpuart1);
        HAL_I2C_MspInit(&hi2c1);
    }
    
}


void app_init(void){
    HAL_Delay(10000);
    flash_init();
    modbus_init();
//    adc_init();
}






void app_poll(void){
    modbus_poll();
    adc_poll();
    sleep_poll();
}










